<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1 Object.assign（）

        // const obj1={a:"1",b:"2"}
        // const obj2={c:"3",d:"4"}
        // const res=Object.assign(obj1,obj2)
        // console.log(res);

        // 2扩展运算符
        // const obj1 = {
        //     a: "1",
        //     b: "2"
        // }
        // const obj2 = {
        //     c: "3",
        //     d: "4"
        // }
        // const res = {
        //     ...obj1,
        //     ...obj2
        // }
        // console.log(res);

        // 深拷贝方法 Json.stringify
        // var obj = {
        //     a: {
        //         c: 2,
        //         d: [9, 8, 7]
        //     },
        //     b: 4
        // }
        // var jsontext = JSON.stringify(obj)
        // var obj1 = JSON.parse(jsontext)
        // console.log(obj);
        // console.log(obj1);
        // obj.a.d[0] = 666
        // console.log(obj);
        // console.log(obj1);

        // 使用递归实训深拷贝
        // function deepClone(obj) {
        //     let objClone = Array.isArray(obj) ? [] : {};
        //     if (obj && typeof obj === "object") {
        //         for (key in obj) {
        //             if (obj.hasOwnProperty(key)) {
        //                 //判断obj子元素是否为对象，
        //                 if (obj[key] && typeof obj[key] === "object") {
        //                     objClone[key] = deepClone(obj[key]);
        //                 } else {
        //                     //如果不是
        //                     objClone[key] = obj[key];
        //                 }
        //             }
        //         }
        //     }
        //     return objClone;
        // }
        // let a = [1, 2, 3, 4],
        //     b = deepClone(a);
        // a[0] = 2;
        // console.log(a, b);

        // 函数库lodash的_.cloneDeep方法
        // var _ = require('lodash')
        // var obj = {
        //     a: {
        //         c: 2,
        //         d: [9, 8, 7]
        //     },
        //     b: 4
        // }
        // var obj1 = _.cloneDeep(obj)
        // console.log(obj === obj1); //false

        // 通过JQuery的extend方法实现深拷贝：
        // let $ = require('jquery');
        // let obj1 = {
        //     a: 1,
        //     b: {
        //         f: {
        //             g: 1
        //         }
        //     },
        //     c: [1, 2, 3]
        // };
        // let obj2 = $.extend(true, {}, obj1);

        // // 浅拷贝Object.assign
        // const obj = {};
        // const source = {
        //     name: 'nordon',
        //     info: {
        //         age: 18
        //     }
        // };
        // Object.assign(obj, source);
        // console.log(obj); // {name: 'nordon', info: {…}}

        // 可以拷贝 Symbol 类型的属性。
        // const obj = {};
        // const source = {
        //     name: 'nordon',
        //     symbol: Symbol()
        // };
        // Object.defineProperty(source, 'innumerable', {
        //     value: 'innumerable',
        //     enumerable: false
        // });
        // Object.assign(obj, source);
        // console.log(obj); // {name: 'nordon', symbol: Symbol()}

        //         扩展运算符
        // const source = {
        //   name: 'nordon',
        //   info: {
        //     age: 18
        //   }
        // };
        // const obj = {...source};
        // Object.assign(obj, source);
        // source.info.age = 20;
        // console.log(obj);
        // console.log(source);

        // // Array.prototype.concat
        const arr = [1, 2, {
            name: 'nordon'
        }];
        const newArr = arr.concat();
        newArr[2].name = 'wy';
        console.log(arr);
        console.log(newArr);

        // 2，Array.prototype.slice
        let array = [{
            a: 1
        }, {
            b: 2
        }]
        let array1 = array.slice(0);
        console.log(array1)
    </script>
</body>

</html>